package clasesGraficas;

/*Activity de ventas primer nivel */

import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.graphics.Color;

public class VentasN1 {
	//### VARIABLES ###
	
	//Varibles del activity
	
	private XYMultipleSeriesDataset dataset = null;
	private XYMultipleSeriesRenderer mRenderer = null;
	private String[] meses = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
	    					      "Agosto", "Septiembre", "Noviembre", "Diciembre"};
	
	//Variables que son pasadas al activity
	private int[] xValues = null;
	private String[] xValuesS = null;
	private double[] yValues = null;
	private String titulo ="";
	
	//### METODOS ###
	
	public XYMultipleSeriesRenderer getmRenderer() {
		return mRenderer;
	}
	
	public void setmRenderer(XYMultipleSeriesRenderer mRenderer) {
		this.mRenderer = mRenderer;
	}
	
	public XYMultipleSeriesDataset getDataset() {
		return dataset;
	}

	public void setDataset(XYMultipleSeriesDataset dataset) {
		this.dataset = dataset;
	}
		
	//tunea las lineas
	public void tuneRender (XYSeriesRenderer render){
		render.setDisplayChartValues(true); //Se muestra valores
		render.setChartValuesTextSize(30); //Tamano de los valores
		render.setChartValuesSpacing(8); //Espacio entre el punto y el valor
		render.setLineWidth(5); //Ancho de linea		
		render.setPointStyle(PointStyle.TRIANGLE); //Punto
		render.setColor(Color.argb(255,250,100,0)); //Color de linea
	}
		
	//tunea la grafica
	@SuppressWarnings("deprecation")
	public void tuneGraphic (XYMultipleSeriesRenderer mRenderer, int tipo){
		getmRenderer().setBarSpacing(1);
		
		//Titulo del reportes
		mRenderer.setChartTitle(titulo);
		mRenderer.setFitLegend(true);
		mRenderer.setChartTitleTextSize(30);
		mRenderer.setLabelsColor(Color.WHITE); //Esto es para todos los labels
		
		//Cuadricula
		mRenderer.setShowGrid(true);
		mRenderer.setGridColor(Color.BLACK);
		mRenderer.setXLabels(xValues.length); //Cantidad de lineas
		mRenderer.setYLabels(15); //Cantidad de lineas
			
		//Ejes X,Y
		mRenderer.setPanEnabled(true,true); //Habilitar movimiento {x,y}
			
		//Cuadrar la grafica
		mRenderer.setMargins(new int[] {40, 35, 0, 5}); //{arriba, derecha, abajo, izquierda}
		mRenderer.setBackgroundColor(Color.WHITE);
			
		//Leyenda de la grafica
		mRenderer.setLegendTextSize(25);
		mRenderer.setLegendHeight(70);
			
		//mRenderer.setZoomRate(1.1f);
		//mRenderer.setZoomButtonsVisible(true);
			
		//Centrar las barras
		mRenderer.setYAxisMax(this.findMaxY(yValues) + this.getIndicadorY(yValues));
		mRenderer.setYAxisMin(0);

		if (tipo == 3){
			mRenderer.setXTitle("Años");
			mRenderer.setXAxisMin(this.findMin(xValues)-2);
			mRenderer.setXAxisMax(this.findMax(xValues)+2);
		}
		else if (tipo == 1){
			mRenderer.setXTitle("Meses");	
			mRenderer.setXAxisMin(0);
			mRenderer.setXAxisMax(xValuesS.length + 2);
			for(int i=0;i<xValuesS.length;i++){
				mRenderer.addXTextLabel(i+1, xValuesS[i]);
			}
		}
		mRenderer.setYTitle("VENTAS EN SOLES");
		mRenderer.setAxisTitleTextSize(25);
		mRenderer.setClickEnabled(true);
	}
		
	//Encontrar el minimo de un arreglo
	public int findMin (int[] array){
		int min = array[0];
		for(int i=1;i<array.length;i++)
			if (array[i]<min)
				min = array[i];
		return min;
	}
		
	//Encontrar el maximo de un arreglo
	public int findMax (int[] array){
		int max = array[0];
	for(int i=1;i<array.length;i++)
			if (array[i]>max)
				max = array[i];
		return max;
	}
	
	//Encontrar el maximo de un arreglo
		public double findMaxY (double[] array){
			double max = array[0];
		for(int i=1;i<array.length;i++)
				if (array[i]>max)
					max = array[i];
			return max;
		}
		
	public int getIndicadorY (double [] array){
		double suma = 0;
		double promedio;
		int indicador = 1;
		for (int i=0;i<array.length;i++)
			suma += array[i];
		promedio = suma/(double)array.length;
			
		while (promedio>0){
			promedio /= 10;
			if (promedio>0)
			indicador *= 10;
		}
		return indicador;
	}
		
	//Pintar reporte (tipo es: 1= anual, 2= trimestrual/mensual)
	public void ejecutar(int[] x, double[] y, String titulo, int tipo) {
		
		this.xValues = x;
		this.yValues = y;
		this.titulo = titulo;
		dataset = new XYMultipleSeriesDataset();
		mRenderer = new XYMultipleSeriesRenderer();
				
		TimeSeries series = new TimeSeries("Ventas Totales");
		for (int i= 0; i < xValues.length; i++)
		{
			series.add(xValues[i],yValues[i]);
		}
		dataset.addSeries(series);
		
		XYSeriesRenderer render = new XYSeriesRenderer();
		this.tuneRender(render);
		
		mRenderer.addSeriesRenderer(render);
		this.tuneGraphic(mRenderer, tipo);
	}
	
	//Pintar reporte (tipo es: 1= anual, 2= trimestrual/mensual)
		public void ejecutar(String[] x, double[] y, String titulo, int tipo) {
			
			this.xValuesS = x;
			this.yValues = y;
			this.titulo = titulo;
			dataset = new XYMultipleSeriesDataset();
			mRenderer = new XYMultipleSeriesRenderer();
					
			TimeSeries series = new TimeSeries("Ventas Totales");
			for (int i= 0; i < xValues.length; i++)
			{
				series.add(i + 1,yValues[i]);
			}
			dataset.addSeries(series);
			
			XYSeriesRenderer render = new XYSeriesRenderer();
			this.tuneRender(render);
			
			mRenderer.addSeriesRenderer(render);
			this.tuneGraphic(mRenderer, tipo);
	}
}
